package com.ywk.base.concurrency.scheduledTask.simple;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @Author zbh
 * @Date 2023/2/20
 *  1.Timer 类实现定时任务的优点是方便，因为它是 JDK 自定的定时任务，但缺点是任务如果执行时间太长或者是任务执行异常，会影响其他任务调度
 *  2.ScheduledExecutorService是JAVA 1.5后新增的定时任务接口，它是基于线程池设计的定时任务类，每个调度任务都会分配到线程池中
 *  的一个线程去执行（任务是并发执行，互不影响）,ScheduledExecutorService可以实现Timer具备的所有功能，并解决了 Timer类存在的问题
 */
public class ScheduledExecutorServiceTest {

    public static void main(String[] args) {
        // 创建任务队列；10为线程数量
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);

        scheduledExecutorService.schedule(new Runnable() {
            @Override
            public void run() {
                System.out.println("延迟三秒");
            }
        },3,TimeUnit.SECONDS);

        //执行任务
        scheduledExecutorService.scheduleAtFixedRate(() -> {
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
            String dateStr = sdf.format(new Date());
            System.out.println("ScheduledExecutorService执行定时任务：" + dateStr);
        },1,2, TimeUnit.SECONDS);// 1s 后开始执行，每 2s 执行一次
    }
}
